//package com.fiveGroup.interceptor;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//
//import com.fiveGroup.pojo.User;
//import com.fiveGroup.pojo.vo.DataVo;
//import com.fiveGroup.service.UserService;
//import com.fiveGroup.util.JwtUtil;
//import com.fiveGroup.util.UserContextHolder;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.ExpiredJwtException;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import java.io.IOException;
//
/// *
//鉴权拦截器 用于系统前置鉴权
// */
//@Slf4j
//@RequiredArgsConstructor
//@Component
//public class AuthInterceptor implements HandlerInterceptor {
//    private final JwtUtil jwtUtil;
//    private final ObjectMapper objectMapper; //把对象转为字符串
//    private final UserService userService;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        if (request.getMethod().equals("OPTIONS")) {
//            return true;
//        }
//      /*
//      1.从request 中获取 请求头中获取JwTToken
//
//      2.校验Token的有效期与用户信息
//      2.1校验成功 返回true 否则 返回false
//      2.2校验成功 查询用户封禁信息 被ban了不能访问
//       */
//        String token = request.getHeader("token");
//        try {
//            if (token != null && !token.isEmpty()) {
//                //判断是否封禁
//                Claims claims = jwtUtil.extractAllClaims(token);
//                System.out.println(claims.getSubject());
//                Integer userId = (Integer) claims.get("userId");
//                log.info("userId:{}", userId);
//                User userByDb = userService.getById(userId);
//                if (userByDb == null) {
//                    error(response, 500, "用户不存在");
//                    return false;
//                }
//                if (userByDb.getStatus().equals(0)) {
//                    error(response, 403, "用户被封禁");
//                    return false;
//                }
//                //所有校验都通过了 需要设置全局上下文 存储用户信息
//                UserContextHolder.setUser(userByDb);
//                return true;
//            } else {
//                error(response, 401, "鉴权失败");
//                return false;
//            }
//        } catch (ExpiredJwtException e) {
//            error(response, 401, "凭证过期，请重新登录");
//            return false;
//        } catch (Exception e) {
//            error(response, 401, "鉴权失败");
//            return false;
//        }
//
//    }
//
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        //
//        UserContextHolder.clear();
//    }
//
//    private void error(HttpServletResponse response, Integer code, String msg) throws IOException {
//        DataVo<Object> dataVo = new DataVo<>();
//        dataVo.setCode(code);
//        dataVo.setMsg(msg);
//        //  response.setContentType(StandardCharsets.UTF_8.toString());
//        response.setContentType("application/json;charset=utf-8");
//        response.getWriter().write(objectMapper.writeValueAsString(dataVo));
//    }
//
//}
